/* 
 * Copyright 2014 ShangDao.Ltd  All rights reserved.
 * SiChuan ShangDao.Ltd PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 * 
 * @ImageLoader.java  2014-9-9 上午10:28:14 - Carson
 * @author YanXu
 * @email:981385016@qq.com
 * @version 1.0
 */

package com.android.tiango.baba.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v4.image.listener.LoaderListener;
import android.widget.ImageView;

public class ImageLoader {
	private Context mContext;
	private int mDefaultImage;
	private int mWidth = 0;
	private int mHeight = 0;
	private android.support.v4.image.ImageLoader mImageloder;

	public ImageLoader(Context ctx, int defaultImage) {
		mContext = ctx;
		mDefaultImage = defaultImage;
		mImageloder = new android.support.v4.image.ImageLoader(mContext, defaultImage);
	}

	public void initSize(int width, int height) {
		mWidth = width;
		mHeight = height;
	}

	public void setCircle(boolean isCircle) {
		// mImageloder.setCircle(isCircle);
	}

	public void loadImage(String url, ImageView image) {
		mImageloder.loadImage(url, image);
	}

	public void loadImage(String url, String tag, ImageView image) {
//		if (StringUtils.isEmpty(url)) {
//			image.setBackgroundResource(mDefaultImage);
//		} else {
//
//			if (mWidth != 0 && mHeight != 0) {
//				mImageloder.initSize(mWidth, mHeight);
//			}
//			if (StringUtils.isEmpty(tag)) {
//				mImageloder.loadImage(url, image);
//			} else {
//				mImageloder.loadImage(url, tag, image);
//			}
//		}
		mImageloder.loadImage(url, tag,image);
	}

	public void setImageloderListener(LoaderListener l){
		mImageloder.setLoaderListener(l);
	}
	public Bitmap decodeBitmapFromFile(String srcPath, int width, int height) {
		BitmapFactory.Options newOpts = new BitmapFactory.Options();
		// 开始读入图片，此时把options.inJustDecodeBounds 设回true了
		newOpts.inJustDecodeBounds = true;
		Bitmap bitmap = BitmapFactory.decodeFile(srcPath, newOpts);// 此时返回bm为空

		newOpts.inJustDecodeBounds = false;
		int w = newOpts.outWidth;
		int h = newOpts.outHeight;
		// 现在主流手机比较多是800*480分辨率，所以高和宽我们设置为
		// 缩放比。由于是固定比例缩放，只用高或者宽其中一个数据进行计算即可
		int be = 1;// be=1表示不缩放
		if (w > h && w > width) {// 如果宽度大的话根据宽度固定大小缩放
			be = (int) (newOpts.outWidth / width);
		} else if (w < h && h > height) {// 如果高度高的话根据宽度固定大小缩放
			be = (int) (newOpts.outHeight / height);
		}
		if (be <= 0)
			be = 1;
		newOpts.inSampleSize = be;// 设置缩放比例
		// 重新读入图片，注意此时已经把options.inJustDecodeBounds 设回false了
		bitmap = BitmapFactory.decodeFile(srcPath, newOpts);
		return compressImage(bitmap);// 压缩好比例大小后再进行质量压缩
	}

	private Bitmap compressImage(Bitmap image) {

		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法，这里100表示不压缩，把压缩后的数据存放到baos中
		int options = 100;
		while (baos.toByteArray().length / 1024 > 100) { // 循环判断如果压缩后图片是否大于100kb,大于继续压缩
			baos.reset();// 重置baos即清空baos
			image.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%，把压缩后的数据存放到baos中
			options -= 10;// 每次都减少10
		}
		ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把压缩后的数据baos存放到ByteArrayInputStream中
		Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);// 把ByteArrayInputStream数据生成图片
		return bitmap;
	}
}
